package com.idroc.coelacanth.util;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Random;

/**
 * 随机定位元素辅助类
 * @author yuyoo (yuyoo4j@163.com)
 * @date 2009-12-2 下午01:58:40
 */
public class RandomUtil {
	
	private static Random random = new Random();
	 	
	/**
	 * 随机获取多个 数组的下标
	 * @param length -- 数组长度
	 * @param count -- 期望随机下标的个数
	 * @return -- 包含随机下标的数组
	 */
	public static int[] randomGetIndex(int length, int count) {
		
		int[] s = new int[length];
		int[] t = new int[count];
		for (int i = 0; i < s.length; i++) {
			s[i] = i;
		}
		for (int i = 0; i < t.length; i++) {
			int r = random.nextInt(s.length - i);
			t[i] = s[r];
			s[r] = s[s.length - i - 1];
		}
		return t;
	}
	
	/**
	 * 随机获取列表中的一个元素
	 * @param <T> -- 泛型
	 * @param src -- 列表
	 * @return -- 列表元素
	 */
	public static <T> T randomGet(List<T> src) {
		
		int index = random.nextInt(src.size());
		return src.get(index);
	}
	
	/**
	 * 随机获取数组中的一个元素
	 * @param <T> -- 泛型
	 * @param src -- 列表
	 * @return -- 列表元素
	 */
	@SuppressWarnings("unchecked")
	public static <T> T randomGet(Object[] src) {
		
		int index = random.nextInt(src.length);
		return (T)src[index];
	}
	
	/**
	 * 随机获取map中的一个key
	 * @param src -- map
	 * @return -- key
	 */
	@SuppressWarnings("unchecked")
	public static Object randomGetKey(Map src) {
		
		int randomIndex = random.nextInt(src.size());
		Iterator it = src.keySet().iterator();
		for (int i = 0;i < randomIndex; i++) {
			it.next();
		} 
		return it.next();
	} 
}
